48041ba87705176c0225f3889de64105cb587666,sulky-formatting/src/main/java/de/huxhorn/sulky/formatting/SafeString.java,SafeString,recursiveAppend,#Object#StringBuilder#IdentityHashMap#,137

Before Change


	 */
	private static void recursiveAppend(Object o, StringBuilder str, IdentityHashMap<Object, Object> dejaVu)
	{
		if(o == null)
		{
			str.append(NULL_VALUE);
			return;
		}
		if(o instanceof String)
		{
			str.append(o);
			return;
		}

		Class oClass = o.getClass();
		if(oClass.isArray())
		{
			if(oClass == byte[].class)
			{
				str.append(Arrays.toString((byte[]) o));
				return;
			}
			if(oClass == short[].class)
			{
				str.append(Arrays.toString((short[]) o));
				return;
			}
			if(oClass == int[].class)
			{
				str.append(Arrays.toString((int[]) o));
				return;
			}
			if(oClass == long[].class)
			{
				str.append(Arrays.toString((long[]) o));
				return;
			}
			if(oClass == float[].class)
			{
				str.append(Arrays.toString((float[]) o));
				return;
			}
			if(oClass == double[].class)
			{
				str.append(Arrays.toString((double[]) o));
				return;
			}
			if(oClass == boolean[].class)
			{
				str.append(Arrays.toString((boolean[]) o));
				return;
			}
			if(oClass == char[].class)
			{
				str.append(Arrays.toString((char[]) o));
				return;
			}

			// special handling of container Object[]
			if(dejaVu.containsKey(o))
			{
				str.append(RECURSION_PREFIX).append(identityToString(o)).append(RECURSION_SUFFIX);
				return;
			}
			dejaVu.put(o, null);

			Object[] oArray = (Object[]) o;
			str.append(CONTAINER_PREFIX);
			boolean first = true;
			for(Object current : oArray)
			{
				if(first)
				{
					first = false;
				}
				else
				{
					str.append(CONTAINER_SEPARATOR);
				}
				recursiveAppend(current, str, new IdentityHashMap<>(dejaVu));
			}
			str.append(CONTAINER_SUFFIX);

			return;
		}

		if(o instanceof Map)
		{
			// special handling of container Map
			if(dejaVu.containsKey(o))
			{
				str.append(RECURSION_PREFIX).append(identityToString(o)).append(RECURSION_SUFFIX);
				return;
			}
			dejaVu.put(o, null);

			Map<?, ?> oMap = (Map<?, ?>) o;
			str.append(MAP_PREFIX);
			boolean first = true;
			for(Map.Entry<?, ?> current : oMap.entrySet())
			{
				if(first)
				{
					first = false;
				}
				else
				{
					str.append(CONTAINER_SEPARATOR);
				}
				Object key = current.getKey();
				Object value = current.getValue();
				recursiveAppend(key, str, new IdentityHashMap<>(dejaVu));
				str.append(MAP_KEY_VALUE_SEPARATOR);
				recursiveAppend(value, str, new IdentityHashMap<>(dejaVu));
			}
			str.append(MAP_SUFFIX);
			return;
		}

		if(o instanceof Collection)
		{
			// special handling of container Collection
			if(dejaVu.containsKey(o))
			{
				str.append(RECURSION_PREFIX).append(identityToString(o)).append(RECURSION_SUFFIX);
				return;
			}
			dejaVu.put(o, null);

			Collection<?> oCol = (Collection<?>) o;
			str.append(CONTAINER_PREFIX);
			boolean first = true;
			for(Object current : oCol)
			{
				if(first)
				{
					first = false;
				}
				else
				{
					str.append(CONTAINER_SEPARATOR);
				}
				recursiveAppend(current, str, new IdentityHashMap<>(dejaVu));
			}
			str.append(CONTAINER_SUFFIX);
			return;

After Change


					str.append(CONTAINER_SEPARATOR);
				}

				if(!handleSimpleContainerValue(current, str, quoteStringsInContainers))
				{
					recursiveAppend(current, str, new IdentityHashMap<>(dejaVu), quoteStringsInContainers);
				}
			}
			str.append(CONTAINER_SUFFIX);